265. Golang簡略筆記(二)

WHY

懶是工程師的原動力,
起因是我不想要手動比對兩份GCP價格的金額有哪些差距。
用excel vlookup 應該也是能處理,但可能需要重複的剪剪貼貼,
或是寫成vba,都要寫code的話,就直接寫吧。

Note

  1. 回傳時,可以用 _ 省略回傳的參數

只取得row值,備忘一下

cell col row
A1 1 1
A8 1 8
B1 2 1
_, lastEndRow := parseCell(merge.GetEndAxis())

// parseCell: 將 Excel 的儲存格名稱 (如 "A1") 解析為列號與行號
func parseCell(cell string) (col int, row int) {
	col, row, err := excelize.CellNameToCoordinates(cell)
	if err != nil {
		log.Fatalf("解析儲存格名稱失敗: %v", err)
	}
	return col, row
}

  1. 拆func時,傳送指標
    解析excel,不可避免的就是開檔,
    用指標的話

上述原話來自chatGPT


func insertData(f *excelize.File, sheetName string, db *sql.DB) {
....
}
  1. 數字轉字串
moneyCell := "H" + strconv.Itoa(lastEndRow)
  1. output的差異

    • 功能設計不同

- fmt:用於普通的輸出和格式化,更多的是用來處理程序正常運行時的輸出。
- log:專門用於記錄事件、錯誤和診斷程序問題,通常會自動添加時間戳,讓記錄更方便檢索。

以上來自ChatGPT


兩者都有Print,Printf,Println
分別代表 列印,格式化列印(%s,%d),換行列印。

錯誤訊息 fmt.Errorf 與 log.Fatalf ,
前者是回傳error,後者則輸出錯誤訊息並結束程式

  1. 查SQLite的軟體

    DB Browser for SQLite

brew install db-browser-for-sqlite

Conclusion

ChatGPT很好用沒錯,
不然這個程式花的時間可能要更久,
需要先查要用哪個套件,判斷哪些儲存格是合併的,
再取他後面欄位的值,建立sqlite、table,insert,update。
因為不只一個sheet要做,所以將原本func main底下的程式重構。
讓程式簡潔點。

但是,GPT也是有幻覺,我要計算SQL A跟B 欄位的差距(C),
A已經有值,B是update後才有值,
同時計算C的話,會變成NULL。
GPT跟我說能同時計算,跟我印象中的不一樣,
我一再確認,GPT還是說可以(暈)。